#include "llvm/LLVMContext.h"
#include "llvm/Module.h"

#include "llvm/PassManager.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Analysis/Verifier.h"
#include "llvm/Assembly/Parser.h"
#include "llvm/Assembly/PrintModulePass.h"

#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/Streams.h"
#include "llvm/Support/SystemUtils.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Signals.h"
#include <iostream>
#include <fstream>
#include <memory>

using namespace llvm;


int bc_generator(std::string InputFilename,std::string OutputFilename,int argc,char **argv);
//bc_generator will compile human-read file into a bitcode file


std::string ass_generator(cl::opt<std::string> InputFilename,std::string OutputFilename,int argc, char **argv);
//ass_generator will disassemble the bitcode file into a human-read file

int gen_finalfile(std::string bitcode_files,cl::opt<std::string> OutputFilename,int argc,char **argv);
//this routine will generate the final output bitcode file
